#define PI 3.1415
#include <stdio.h>
#include <math.h>
#include "List.h"
#include "graphic.h"

// Funcao que calcula o volume de uma esfera
float volume_esphere(float raio){
  // 4/3 * PI r^3
  return((4.0/3.0) * PI * (raio*raio*raio));
}

// Calcula o volume de um cubo
float volume_cube(float arest){
  // a^3
  return (arest*arest*arest);
}

// Calcula o volume de um cilindro
float volume_cilindro(float raio, float altura){
  return (PI * raio * raio * altura);
}


//TESTA SE 3 MEDIDAS REALMENTE FORMAM UM TRIANGULO PELA DESIGUALADADE
//TRIANGULAR PARA O USUARIO NAO COLOCAR LADOS QUE BUGUE A ENTRADA...

int forma_triangulo(float L1,float L2 ,float L3 ){
  if ( L1 <= ( L2 + L3 ) ) return 1;
    else if ( L2 <= ( L2 + L1 ) ) return 1;
	else if ( L3 <= L1 + L2 ) return 1;
	  else return 0;
}//forma-tri...


//CALCULO DO VOLUME DO TETRAEDRO QUAQUER V = AREA_BASE * H / 3;
//ENTREADA DE DADOS: L1, L2, L3 DO TRIANGULO BASE E ALTURA H
//USAREMOS A FÓRMULA DA AREA DO TRIANGULO DE HERÃO - em funcao dos lados
float volume_tetraedro(float lado1,float lado2 ,float lado3,float altura ){

  float  semi_perimetro , area_base;

  if(!forma_triangulo(lado1,lado2,lado3)) return 0;   //forma triangulo 

  //CALCULANDO PRIMEIRO A AREA 
  semi_perimetro = (  lado1 + lado2 + lado3 ) / 2;

  // FORMULA de HERAO
  area_base = semi_perimetro * 	( semi_perimetro - lado1 ) *
				( semi_perimetro - lado2 ) *
				( semi_perimetro - lado3 );

  area_base = sqrt( area_base );

  return area_base * altura;

}//FIM-VOL...


//FORMULA DEDUZIDA POR INTEGRACAO TRIPLA - CALCULO III
//V = 4/3 * PI  * RX * RY * RZ;
float volume_elipsoide( float rx , float ry, float rz ){
  return ((4.0 / 3.0) * PI * rx * ry * rz);
}//forma-tri...

float volume_total(TipoLista *Lista){
	TipoItem *cel_aux;    // Cria um ponteiro para um TipoItem para varrer a lista
	graphic *graph_aux;    // Cria um ponteiro para o grafico que esta em cada TipoItem varrida
	float i=0;                 //cria uma variavel com a soma de todas as figuras
	if(vazia(Lista))
		printf("\nLista Vazia!\n");
	else {
		cel_aux=Lista->primeiro;        // Inicia a TipoItem auxiliar com a 1a TipoItem da lista
		while(cel_aux!=NULL){           // Enquanto nao terminar de ler a lista	
			graph_aux=(graphic*)cel_aux->dado;      // Coloca o grafico da TipoItem no grafico auxiliar
			i=i+graph_aux->volume;        // incrementando os valores 
			cel_aux=cel_aux->proximo;     // Faz a TipoItem andar na lista
		}
	}
	printf("O volume total e': %1.4f.",i);

	return(i);
}


